# _*_coding:utf-8_*_
#版本更新1：实现循环判断，思路先加一个死循环while1，可以实现不断输入，再加一个if。选中代码 统一进行缩进
#版本更新2：输入错误给与提示该如何输入，且实现对格式的控制
#版本更新3：对未包含的所有其他字符予以通过
#版本更新4(重构1)：对代码进行重构，使之变为pythonic (更多的使用python库中的函数),让它更精致，使用string库
#版本更新5(重构2)：去掉一些注释，去掉常量定义,直接使用string库中的函数
#版本更新6(重构3)： 使用二进制 置位 按位与 按位或
#版本更新7(重构4)：删除注释
#版本更新8(封装1)：代码函数化，折叠复杂度
#版本更新9(封装2)：降低变量名的隐患，同时消除全局变量(使用类似主函数来实现)
#版本更新10：删除非必要的注释
#版本更新11：（第六讲）再简化，现在使用内置函数来判断大写 小写 数字，而不用string函数库了
#import string

def yanzheng_password(password):
    result = False

    password_state = 0b00000

    for char in password:
        if char.isupper():
            password_state = password_state | 0b10000
            #have_upper = True
        elif char.islower():
            password_state |= 0b01000
            have_lower = True
        elif char.isdigit():
            password_state |= 0b00100
            have_digit = True
        else:
            password_state |= 0b00010
            have_punctuation = True
    if len(password) >= 8:
        password_state |= 0b00001

    #todo:输出反馈：

    if password_state == 0b11111:
        print('密码符合要求！')

        result = True

    else:
        tishi = '密码不符合要求，'
        if password_state & 0b00001 == 0:
            tishi = tishi + '长度不足8，'
        if password_state & 0b10000 == 0:
            tishi = tishi + '没有包含大写字符，'
        if password_state & 0b01000 == 0:
            tishi += '没有包含小写字符，'
        if password_state & 0b00100 == 0:
            tishi += '没有包含数字，'
        if password_state & 0b00010 == 0:
            tishi += '没有包含标点,'

        tishi = tishi[:-1]

        print(tishi)


    return (result)


def main():
    while 1:

        #TODO:用户输入密码
        user_password = input('请输入密码:')

        #TODO：判断密码的合法性(只是判断)

        if yanzheng_password(user_password):
            break

main()
